< Linux > 多线程(线程同步与互斥、可重入、线程安全、死锁) | 您所在的位置:网站首页 › 可重入函数 线程安全 › < Linux > 多线程(线程同步与互斥、可重入、线程安全、死锁) |
目录 1、Linux线程互斥 进程线程间的互斥相关背景概念 互斥量 mutex 互斥量的接口 互斥量实现原理探究 互斥量接口的使用(多种方式初始化锁) 2、可重入 VS 线程安全 概念 常见的线程不安全的情况 常见的线程安全的情况 常见的不可重入的情况 常见的可重入的情况 可重入与线程安全联系 可重入与线程安全区别 3、常见锁概念 死锁 死锁的四个必要条件 避免死锁 4、Linux线程同步 同步概念与竞态条件 条件变量 条件变量函数 为什么pthread_mutex_wait需要互斥量 条件变量使用规范 1、Linux线程互斥 进程线程间的互斥相关背景概念 临界资源: 多线程执行流共享的资源叫做临界资源。临界区: 每个线程内部,访问临界资源的代码,就叫做临界区。互斥: 任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性: 不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。下面详谈临界资源和临界区: 对于如下的代码,被多个线程访问的全局变量即临界资源,而访问此全局变量的代码即临界区:下面详谈互斥和原子性: 注意:临界资源,可能会因为共同访问,造成数据不一致的问题,示例如下。 如下我写了一个票数计数器(全局变量tickets),创建4个线程来模拟多线程抢票的场景: #include #include #include #include #include #include using namespace std; // int 票数计数器 int tickets = 10000; // 临界资源,可能会因为共同访问,造成数据不一致的问题 void *getTickets(void *args) { const char *name = static_cast(args); while (true) { // 临界区 if (tickets > 0) { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |